package com.wyp.design.pattern.behavior.templatemethod;

/**
 * 模板方法模式：使用示例解释：录制课程实例
 * 需要将不变的模板，进行final修饰，防止子类进行重写
 *
 * @author: Oliver
 * @time: 2020/5/23/19:58
 */
public abstract class ACourse {
    protected final void makeCourse() {
        this.makePPT();
        this.makeVideo();
        if (needWriteArticle()) {
            this.writeArticle();
        }
        this.packageCourse();
    }

    final void makePPT() {
        System.out.println("制作PPT");
    }

    final void makeVideo() {
        System.out.println("制作视频");
    }

    final void writeArticle() {
        System.out.println("编写手记");
    }


    //钩子方法 可以进行选择使用固定的模板方法
    protected boolean needWriteArticle() {
        return false;
    }

    abstract void packageCourse();
}
